//var TEST = true;
var TEST = false;

/*
UserScoreState, WebScoreState 有三种状态：
  null: 表示未录入
     1: 表示已录入
     2: 表示用户输入的名字与学号与网页中的不一致
*/

function WebScore(Data){
	this.Data = Data;
	this.State = null;
	//this.Color = Data[0][2].css('color');
	//this.Border = Data[0][2].css('border');
}

WebScore.Msg = {
	SucessLog:            '恭喜！成绩已经全部录入！',
	User_Null:            '温馨提示：您录入的成绩单为空。',
	User_Conflict_Web:    '错误提示：您录入的成绩单中存在学号和姓名与Web页面中的学号和姓名不一致的情况，请检查是否有误：\n',
	User_Null_Web: 		  '温馨提示：您录入的成绩单中未包含Web页面中的任何学生信息。',
	User_LittleInter_Web: '温馨提示：您录入的成绩单与Web页面中的信息严重不符，请检查是否弄错了成绩单。',
	User_Inter_Web:       '温馨提示：您录入的成绩单中有如下信息在Web页面中并不存在，请检查这些信息是否有误：\n',
	User_Less_Web:        '温馨提示：您录入的成绩单未能完全覆盖Web页面中的成绩，请您检查如下成绩是否需要录入或更新：\n',
};

// 清空Web端的“成绩”
WebScore.prototype.clear = function (){
	for(var i = 0; i < this.Data.length; i++) {
		this.Data[i][2].val('');
	}
}

WebScore.prototype.getDataTxt = function(){
	var DataTxt = '', sep = ', ';
	for(var i = 0; i < this.Data.length; i++)
		DataTxt += this.Data[i][0] + sep + this.Data[i][1] + sep + this.Data[i][2].val() + '\n';
	return DataTxt;
}

// 重置Web端“成绩”框颜色
WebScore.prototype.resetCSS = function(){
	//this.Data[j][2].css({'border': this.Border, 'color': this.Color});
	for(var j = 0; j < this.Data.length; j++)
		this.Data[j][2].css({'color':'black', 'font-weight':'normal'});
}

// 向Web端填充“成绩”
WebScore.prototype.writeUserScore = function(UserScore){
	this.resetCSS();
	
	var bID = UserScore.Data[0][0] != '';
	var bName = UserScore.Data[0][1] != ''
	if(bID)// 如果学号列不为空，优先按照学号列插入成绩
		p = 0;
	else if(bName)//如果姓名列不为空，则按照姓名列插入成绩
		p = 1;
	
	bIDName = bID & bName;
	
	UserScore.State = new Array(UserScore.Data.length); // 记录已录入的用户数据
	this.State  = new Array(this.Data.length); // 记录已录入的Web数据
	for(var i = 0; i < UserScore.Data.length; i++) {
		for(var j = 0; j < this.Data.length; j++){
			if(this.Data[j][p] == UserScore.Data[i][p]){
				this.State[j] = 1;
				UserScore.State[i] = 1;
				
				// 检查学号一致，但姓名不一致的情形
				if(bIDName && this.Data[j][1] != UserScore.Data[i][1]){ // 学号与web页面一致，但姓名与web页面不一致
					UserScore.State[i] = 2;
				}
				else if(!TEST && this.Data[j][2].val().trim() != UserScore.Data[i][2].trim()){
					this.Data[j][2].val(UserScore.Data[i][2]);
					this.Data[j][2].css({'color':'red', 'font-weight':'bold'});
					//this.Data[j][2].css({'color': 'red', 'border-color': 'red'});
				}
				break;
			}
		}
	}
	
	if(!bIDName)
		return;
	
	// 检查学号不一致，但姓名一致的情形
	p = 1;
	for(var i = 0; i < UserScore.Data.length; i++) {
		if(UserScore.State[i] == 1) // 不处理已经录入的成绩
			continue;
		for(var j = 0; j < this.Data.length; j++){
			if(this.Data[j][p] == UserScore.Data[i][p]){
				UserScore.State[i] = 2;
				this.State[j] = 2;
				break;
			}
		}
	}
}

//请检查这些成绩在用户输入的成绩单中是否有误
WebScore.prototype.alertUnlogedScore = function(UserScore){
	var x, txt = '';
	
	x = this.getUndoOrErrorData(UserScore.Data, UserScore.State, 2);
	if(x[0] > 0)
		txt += WebScore.Msg.User_Conflict_Web + x[1];
	
	x = this.getUndoOrErrorData(UserScore.Data, UserScore.State, null);
	if(x[0] > 0){
		if(x[0] >= UserScore.Data.length*.8)
			txt += WebScore.Msg.User_LittleInter_Web;
		else if(x[0] < UserScore.Data.length)
			txt += WebScore.Msg.User_Inter_Web + x[1];
	}
	
	x = this.getUndoOrErrorData(this.Data, this.State, null);
	if(x[0] > 0)
		txt += WebScore.Msg.User_Less_Web + x[1];
	
	if(txt == '')
		alert(WebScore.Msg.SucessLog);
	else
		alert(txt);
}

WebScore.prototype.getUndoOrErrorData = function(AllData, LogedData, obj){
	var counter = 0, UnlogedData = '', ErrorData = '', splitstr = '  ';
	
	for(var i = 0; i < LogedData.length; i++){
		if(LogedData[i] == obj){
			counter++;
			var line = '';
			for(var j = 0; j < AllData[i].length; j++){
				//alert(typeof AllData[i][j])
				if(typeof AllData[i][j] != 'object')
					line += splitstr + AllData[i][j];
				else
					line += splitstr + AllData[i][j].val();
			}
			UnlogedData += splitstr + line + '\n';
		}
	}
	return [counter, UnlogedData];
}
